package com.xbongbong.pro.fundset.pojo;

import com.xbongbong.paas.constant.PaasConstant;
import com.xbongbong.saas.constant.BasicConstant;
import com.xbongbong.saas.enums.business.ContractEnum;
import com.xbongbong.saas.enums.business.CustomerManagementEnum;
import com.xbongbong.saas.enums.business.InvoiceEnum;
import com.xbongbong.saas.enums.business.PaymentEnum;
import com.xbongbong.saas.enums.business.PaymentSheetEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zcp
 * @version v1.0
 * @since v1.0
 */
@Getter
@Setter
@ToString
public class ExplainOpenCloseAttrPojo implements Serializable {
    private static final long serialVersionUID = -7448811474204770618L;
    /**
     * key：切换管理方式时，客户要开启的字段
     * value：开启后是否能再关闭isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> manageOpenCustomerAttrMap;
    /**
     * key：切换管理方式时，客户要关闭的字段
     * value：关闭后是否能再开启isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> manageCloseCustomerAttrMap;
    /**
     * key：切换管理方式时，合同要开启的字段
     * value：开启后是否能再关闭isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> manageOpenContractAttrMap;
    /**
     * key：切换管理方式时，合同要关闭的字段
     * value：关闭后是否能再开启isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> manageCloseContractAttrMap;
    /**
     * key：切换应收规则时，合同要开启的字段
     * value：开启后是否能再关闭isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> openContractAttrMap;
    /**
     * key：切换应收规则时，合同要关闭的字段
     * value：关闭后是否能再开启isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> closeContractAttrMap;
    /**
     * key：切换应收规则时，销项发票要开启的字段
     * value：开启后是否能再关闭isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> openInvoiceAttrMap;
    /**
     * key：切换应收规则时，销项发票要关闭的字段
     * value：关闭后是否能再开启isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> closeInvoiceAttrMap;
    /**
     * key：切换应收规则时，应收款要开启的字段
     * value：开启后是否能再关闭isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> openPaymentAttrMap;
    /**
     * key：切换应收规则时，应收款要关闭的字段
     * value：关闭后是否能再开启isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> closePaymentAttrMap;
    /**
     * key：切换应收规则时，回款单要开启的字段
     * value：开启后是否能再关闭isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> openPaymentSheetAttrMap;
    /**
     * key：切换应收规则时，回款单要关闭的字段
     * value：关闭后是否能再开启isForbidden值(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
     */
    private Map<String, Integer> closePaymentSheetAttrMap;


    public ExplainOpenCloseAttrPojo(){
        /*
         * businessType-isForbidden(当该值为0时，关闭的字段不能再启用、启用的字段不能再关闭)
         * 各业务要处理的字段，后续如有其它字段要处理，则在此处增加
         * 注：
         * （1）当前没有对一个业务内的字段既开启，又关闭的情况。因此当前各业务要开启、关闭的字段都相同
         * （2）当前各个模式、各种管理方式要处理的业务字段都一样，如果后续处理的不同，则不能使用该pojo，在各种情况的处理内塞入要处理的字段即可
         */
        /**
         * 客户
         * 切换管理方式时，应收账期字段：开启后不允许关闭(isForbidden=0)，关闭后不允许启用(isForbidden=0)
         */
        this.manageOpenCustomerAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        manageOpenCustomerAttrMap.put(CustomerManagementEnum.RECEIVABLE_PERIOD.getAttr(), BasicConstant.ZERO);
        this.manageCloseCustomerAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        manageCloseCustomerAttrMap.put(CustomerManagementEnum.RECEIVABLE_PERIOD.getAttr(), BasicConstant.ZERO);

        /**
         * 合同
         * 切换管理方式时，
         *      应收账期字段：开启后不允许关闭(isForbidden=0)，关闭后不允许启用(isForbidden=0)
         * 切换应收规则时，
         *      应收款字段：开启后允许关闭(isForbidden=1)，关闭后不允许启用(isForbidden=0)
         */
        this.manageOpenContractAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        manageOpenContractAttrMap.put(ContractEnum.RECEIVABLE_PERIOD.getAttr(), BasicConstant.ZERO);
        this.manageCloseContractAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        manageCloseContractAttrMap.put(ContractEnum.RECEIVABLE_PERIOD.getAttr(), BasicConstant.ZERO);
        this.openContractAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        openContractAttrMap.put(ContractEnum.ADD_PAYMENT.getAttr(), BasicConstant.ONE);
        this.closeContractAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        closeContractAttrMap.put(ContractEnum.ADD_PAYMENT.getAttr(), BasicConstant.ZERO);

        /**
         * 销项发票
         * 关联回款类型、回款单、应收款字段：开启后用户可以自己关闭(isForbidden=1)，关闭后不允许启用(isForbidden=0)
         */
        this.openInvoiceAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        openInvoiceAttrMap.put(InvoiceEnum.PAYMENT_RELATIONSHIP.getAttr(), BasicConstant.ONE);
        openInvoiceAttrMap.put(InvoiceEnum.PAYMENT_SHEET_ID.getAttr(), BasicConstant.ONE);
        openInvoiceAttrMap.put(InvoiceEnum.PAYMENT_ID.getAttr(), BasicConstant.ONE);
        this.closeInvoiceAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        closeInvoiceAttrMap.put(InvoiceEnum.PAYMENT_RELATIONSHIP.getAttr(), BasicConstant.ZERO);
        closeInvoiceAttrMap.put(InvoiceEnum.PAYMENT_SHEET_ID.getAttr(), BasicConstant.ZERO);
        closeInvoiceAttrMap.put(InvoiceEnum.PAYMENT_ID.getAttr(), BasicConstant.ZERO);

        /**
         * 应收款
         * 开票金额字段：开启后用户可以自己关闭(isForbidden=1)，关闭后不允许启用(isForbidden=0)
         */
        this.openPaymentAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        openPaymentAttrMap.put(PaymentEnum.INVOICE_AMOUNT.getAttr(), BasicConstant.ONE);
        this.closePaymentAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        closePaymentAttrMap.put(PaymentEnum.INVOICE_AMOUNT.getAttr(), BasicConstant.ZERO);

        //回款单
        this.openPaymentSheetAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        openPaymentSheetAttrMap.put(PaymentSheetEnum.INVOICE_AMOUNT.getAttr(), BasicConstant.ONE);
        this.closePaymentSheetAttrMap = new HashMap<>(PaasConstant.DEFAULT_INITIAL_CAPACITY);
        closePaymentSheetAttrMap.put(PaymentSheetEnum.INVOICE_AMOUNT.getAttr(), BasicConstant.ZERO);
    }
}
